package com.leetcode.offer;

/**
 * @author zfl
 * @Classname ExChange
 * @Description 调整数组顺序使奇数位于偶数前面
 * @Date 2020/10/18 15:39
 */
public class ExChange {

    /**
     * @param nums
     * @return
     * 执行用时：2 ms, 在所有 Java 提交中击败了99.73%的用户
     * 内存消耗：47.8 MB, 在所有 Java 提交中击败了12.30%的用户
     */
    public static int[] exchange(int[] nums) {
        if(nums == null || nums.length < 2) {
            return nums;
        }

        int[] num = new int[nums.length];
        int count = 0;
        for (int i = 0, j = nums.length - 1; i <= j;) {
            if(nums[count] % 2 == 0) {
                num[j] = nums[count];
                j--;
            }else {
                num[i] = nums[count];
                i++;
            }
            count++;
        }
        return num;
    }

    /**
     * @param nums
     * @return
     * 双指针法，等到left为偶数，right为奇数，交换
     * 执行用时：2 ms, 在所有 Java 提交中击败了99.73%的用户
     * 内存消耗：46.1 MB, 在所有 Java 提交中击败了99.27%的用户
     */
    public static int[] exchange2(int[] nums) {
        int left = 0, right = nums.length - 1,temp;
        while (left < right) {
            if(nums[left] % 2 == 1) {
                left++;
                continue;
            }
            if(nums[right] % 2 == 0) {
                right--;
                continue;
            }
            temp = nums[left];
            nums[left] = nums[right];
            nums[right] = temp;
            left++;
            right--;
        }
        return nums;
    }

}
